Modern hardware technology provides the ability to increase processing speeds by using multiple processing elements (PEs), which each may perform a separate, parallel operation; such processing is sometimes referred to as parallel processing, or parallelization. In order to take advantage of a potential speed-up in processing from parallelization, a compiler may determine whether source code may be parallelized. For example, a compiler may parallelize a loop—referred to as vectorization—if each iteration of the loop does not depend on any previous iteration of the loop. Such dependencies are often in the form of memory aliases—i.e., where multiple pointers reference a single memory address. A compiler may attempt to prove at compile-time that such potential memory aliases do not exist, so that the compiler can generate parallel code.